package com.example.user.controller;


import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.example.property.api.service.TestService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {

    @DubboReference
    private TestService testService;

    @RequestMapping("/")
    public String hello(){
        return "hello";
    }

    @RequestMapping("/dubbo")
    public String dubboHello(){
        return testService.helloDubbo();
    }

    // 测试登录  ---- http://localhost:8081/acc/doLogin?name=zhang&pwd=123456
    @RequestMapping("doLogin")
    public SaResult doLogin(String name, String pwd) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if("zhang".equals(name) && "123456".equals(pwd)) {
            StpUtil.login(10001);
            return SaResult.ok("登录成功");
        }
        return SaResult.error("登录失败");
    }

    // 查询登录状态  ---- http://localhost:8081/acc/isLogin
    @RequestMapping("isLogin")
    public SaResult isLogin() {
        return SaResult.ok("是否登录：" + StpUtil.isLogin());
    }

    // 查询 Token 信息  ---- http://localhost:8081/acc/tokenInfo
    @RequestMapping("tokenInfo")
    public SaResult tokenInfo() {
        return SaResult.data(StpUtil.getTokenInfo());
    }

    // 将指定账号踢下线   ---- http://localhost:8081/kickout/kickout?userId=10001
    @RequestMapping("kickout")
    public SaResult kickout(long userId) {

        // 踢人下线不会清除Token信息，而是将其打上特定标记，再次访问会提示：Token已被踢下线。
        StpUtil.kickout(userId);

        // 返回
        return SaResult.ok();
    }

    // 将指定账号强制注销   ---- http://localhost:8081/kickout/logout?userId=10001
    @RequestMapping("logout")
    public SaResult logout(Long userId) {
        if(userId == null){
            StpUtil.logout();
        }else {
            // 强制注销等价于对方主动调用了注销方法，再次访问会提示：Token无效。
            StpUtil.logout(userId);
        }
        // 返回
        return SaResult.ok();
    }

    @RequestMapping("checkLogin")
    public SaResult checkLogin() {
        StpUtil.checkLogin();
        return SaResult.ok("是否登录：");
    }
}
